#ifndef __WIZ_UTILS_TICKER_COMPOSITEOBJ_HPP__SHANHAOBO_19800429__
#define __WIZ_UTILS_TICKER_COMPOSITEOBJ_HPP__SHANHAOBO_19800429__

#include "./WizUtilsTickerObject.hpp"

namespace Wiz
{
    namespace Ticker
    {
        namespace Object
        {
            namespace Composite
            {
                template<class TimeT>
                class WIZ_EXPORT Type : public ::Wiz::Ticker::Object::Type<TimeT>
                {
                    typedef Type                                                        tThis;
                protected:
                    typedef TimeT                                                       tTime;
                    typedef ::Wiz::Ticker::Object::Type<tTime>                          tSuper;
                    typedef ::Wiz::Signal::Safe::Type<::Wiz::Void::Type(const tTime&)>  tSignal;
                public:
                    Type(tTicker* TPtr);
                    virtual ~Type();
                public:
                    ::Wiz::Void::Type Register(const tSuper* ObjPtr);
                    ::Wiz::Void::Type Unregister(const tSuper* ObjPtr);
                private:
                    virtual ::Wiz::Void::Type DoTick(const tTime& DeltaTime);
                private:
                    tSignal          m_Signal;
                };
            } /// end of namespace Composite
        } /// end of namespace Object
    } /// end of namespace Ticker
} /// end of namespace Wiz

#endif /*__WIZ_UTILS_TICKER_COMPOSITEOBJ_HPP__SHANHAOBO_19800429__*/
